/**
 * Created by DevilsEyes on 2016/4/19.
 */
'use strict';
//提供和作业相关的接口
//管理员和普通接口全部放在这里。

var $model = require('../db/homework.js');

let filter = function (o) {
    return {
        _id: o._id,
        title: o.title,//标题

        class: o.class || '',//班级  A#B#C#D
        description: o.description || '',//描述

        files: o.files.map((i)=>JSON.parse(i)),//文件 文件JSON字符串组

        overtime: o.overtime,//截止时间
        created: o.created//发布时间
    }
};

module.exports = {

    //获取列表
    getList(ClassStr){
        return new Promise((O, X)=> {

            let query = ClassStr ?
                $model.where('class', new RegExp(`(^|#)${ClassStr}($|#)`))
                :
                $model.find({});

            query.then((homeworks)=> {
                if (homeworks) {
                    O(homeworks.map((o)=>filter(o)));
                } else {
                    throw {
                        code: 9999,
                        msg: '发生了一些错误'
                    }
                }

            });
        });
    },

    //查询某次作业
    getOnebyId(id){
        return new Promise((O, X)=> {
            $model
                .find({_id: id})
                .then((homeworks)=> {
                    if (homeworks) {
                        O(filter(homeworks[0]));
                    } else {
                        throw {
                            code: 9999,
                            msg: '未找到该课件'
                        }
                    }

                });
        })
    },

    //新建一次作业
    save: (obj) => {
        return new Promise((O, X)=> {
            obj.files = [];
            obj.created = new Date().getTime();

            var Entity = new $model(obj);

            Entity.save(()=> {
                O();
            })
        })
    },

    //编辑某次作业
    update: (id, o)=> {
        return new Promise((O, X)=> {
            var Entity = {
                title: o.title,//标题
                description: o.description || '',//描述
                overtime: o.overtime//截止时间
            };
            if (o.files) {
                Entity.files = o.files.map((i)=>JSON.parse(i));//文件 文件JSON字符串组
            }

            $model
                .find({_id: id})
                .update(Entity)
                .then(()=> {
                    O();
                })
        })
    },

    //在作业的Files列表中追加项
    push: (id, file)=> {

        return new Promise((O, X)=> {
            var f = JSON.stringify({
                path: file.path,//标题
                id: file.id || '',//班级  A#B#C#D
                name: file.name || '',//描述
                description: file.description,//截止时间
                created: file.created,//截止时间
                size: file.size//截止时间
            });

            $model
                .findOneAndUpdate({_id: id}, {$push: {files: f}})
                .then((homework)=> {
                    if (homework) {
                        O(filter(homework));
                    } else {
                        X({
                            code: 9999,
                            msg: '未找到该课件'
                        })
                    }
                });
        })


    },

    //删除某次作业
    deleteById: (id)=> {
        return new Promise((O, X)=> {
            $model
                .remove({_id: id})
                .then(()=> {
                    O();
                })
        })
    },

//******************************************
//                 危险!
//******************************************
    //删除全部
    clear: () => {
        return new Promise((O, X)=> {
            $model
                .remove({})
                .then(()=> {
                    O();
                });
        })
    }
};